﻿/* PC INpact Toolkit for Chrome™

	PC INpact Toolkit for Chrome™ est une extension destinée au navigateur Chrome permettant d'accéder à de nombreuses fonctionnalités de PC INpact.
	Vous y retrouverez les actualités, brèves, calendriers du site, mais aussi les comptes Twitter de l'équipe ou des fonctionnalités de recherche.
	Des notifications peuvent aussi être affichées sur votre bureau, à chaque nouvelle publication sur le site (actualités, dossiers, tests).

	Main author : LEGRAND David
	Mail : david@pcinpact.com
	
	Google Code Project : http://pci.im/code-pci-chrome 
	Forum : http://pci.im/forum-pci-chrome
	
    This file is part of PC INpact Toolkit for Chrome™.

    PC INpact Toolkit for Chrome™ is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    PC INpact Toolkit for Chrome™ is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with PC INpact Toolkit for Chrome™.  If not, see <http://www.gnu.org/licenses/>. 

    You're not allowed to use PC INpact Toolkit for Chrome™ name or logo without permission 

	Loading GIF : http://www.ajaxload.info/

 */

// La fonction qui récupère les infos depuis le forum
function get_forum_infos(result) {

	// Si on fait une demande d'infos depuis le background, sans requête ratachée
	// On effectue une requête en mode synchrone
	if (result == undefined)
	{
		// On définit les variables utiles
		var url = "http://forum.pcinpact.com/";
		var result = ext_req(url);
	}

	// On cherche à savoir si l'utilisateur est loggué ou non
	var txt_connect = result.indexOf("Vous avez");
	
	// Si l'utilisateur est connecté, on traite les infos
	if(txt_connect != -1)
	{
		// On récupère toutes les données nécessaires
		var notif_temp = extract(result, "Vous avez", '"', 0);
		
		var end = notif_temp.indexOf("notif");
		var notif = notif_temp.substring(10, end);
		
		var mess = extract(result, "<span id='new_message'>", ' nouveau', 24);
		var winner = extract(result, '<span id="lienProfil">', '</span>', 22);
		var url = extract(result, '<div id="contenuTshirt">', '"', 33);
		var name = extract(result, 'title=\'Votre profil\'><span>', '</span>', 27);
		
		// S'il y a des notifications, et que la valeur est différente de celle enregistrée
		// On affiche une notification
		if ((mess != 0 && mess != window.localStorage.getItem('forum_mess')) || (notif != 0 && notif != window.localStorage.getItem('forum_notif')))
		{
			notify_txt('/pics/cible-pci-128.png', "Alerte - Forum", "Des messages / notifications vous attendent sur le forum");
		}
		
		// On stocke toutes les données obtenues dans un tableau
		var forum_infos = new Array(notif_temp, notif, mess, winner, url, name);
		
		// On enregistre les valeurs de mess et notif dans le local storage pour une utilisation ultérieure
		window.localStorage.setItem('forum_mess', mess);
		window.localStorage.setItem('forum_notif', notif);
		window.localStorage.setItem('forum_connect', 1);
		
		// On met à jour le badge avec le suffixe 'news', pour prendre en compte les actus notifiées
		badge_update('news');
		
		// On renvoie le tableau
		return forum_infos;
	}
	// Sinon on renvoie une valeur nulle
	else 
	{
		// On enregistre que l'utilisateur n'est pas loggué
		window.localStorage.setItem('forum_connect', 0);
		
		// On met à jour le badge avec le suffixe 'news', pour prendre en compte les actus notifiées
		badge_update('news');
		
		return null;
	}
}

// La fonction qui met en forme le texte de la section forum
function get_forum_txt(forum_infos)
{
	// On définit les variables utiles
	var url = "http://forum.pcinpact.com/";
	var messagerie_url = "http://forum.pcinpact.com/index.php?app=members&module=messaging";
	var notif_url = "http://forum.pcinpact.com/index.php?app=core&module=usercp&tab=core&area=notificationlog";
	
	var result_final = '';
	
	// Si la requête a aboutit
	if (forum_infos != null)
	{
		// On attribue les variables qui seront utiles depuis le tableau récupéré, que l'on vide
		var notif_temp = forum_infos.shift();
		var notif = forum_infos.shift();
		var mess = forum_infos.shift();
		var winner = forum_infos.shift();
		var url = forum_infos.shift();
		var name = forum_infos.shift();
	}
	// Si l'utilisateur n'est pas loggué (on ne trouve pas le texte dans la page)
	else if (forum_infos == null) 
	{
		// On affiche un texte spécifique
		result_final = '<div id="forum_lien">Vous n\'êtes pas connecté sur le forum. ' + '<a href="http://forum.pcinpact.com/index.php?app=core&module=global&section=login" target="_blank">Connectez-vous</a>.</div>';
	}

	// On rajoute les liens utiles du forum
	result_final += '<div id="forum_lien_titre_court"><h1>' + 'Liens du Forum' + '</h1></div>';
	result_final += '<div id="forum_lien"><strong>' + '<a href="http://forum.pcinpact.com/" target="_blank">Accueil</a> | ' + '<a href="http://forum.pcinpact.com/gallery" target="_blank">La galerie</a> | ' + '<a href="http://forum.pcinpact.com/topic/11635-a-lire-absolument" target="_blank">Les règles</a> | ' + '<a href="http://forum.pcinpact.com/topic/156682-tous-les-tutoriels-et-centralisations-du-forum" target="_blank">Tous les tutoriels</a> | ' + '<a href="http://forum.pcinpact.com/index.php?app=core&module=usercp" target="_blank">Vos paramètres</a></strong></div>';

	// Si l'utilisateur est connecté, on affiche ses infos
	if (forum_infos != null) 
	{
		result_final += '<div id="forum_lien_titre_court"><h1>' + 'Messagerie : ' + name + '</h1></div>';
		result_final += '<div id="forum_lien">' + '<a href="' + messagerie_url + '" target="_blank">Messagerie</a>' + ' : Vous avez ' + mess + ' nouveau(x) message(s)' + '</div>';
		result_final += '<div id="forum_lien">' + '<a href="' + notif_url + '" target="_blank">Notifications</a>' + ' : ' + notif_temp + '</div>';
	}

	// On affiche le gagnant du t-shirt de la semaine
	result_final += '<div id="forum_lien_titre"><h1>' + 'Gagnant du T-shirt de la semaine : ' + '<a href ="' + url + '" target="_blank">' + winner + '</a>' + '</h1></div><div>&nbsp;</div>';

	return result_final;
}

function get_notif_infos()
{
	return window.localStorage.getItem('forum_mess')
					+ '/' + window.localStorage.getItem('forum_notif')
					+ '/' + window.localStorage.getItem('forum_connect');
}

//La fonction qui gère la section Forum
function forum() {

	window.localStorage.setItem('last_rub_s', 'forum');
	modify_body_size('');
	document.getElementById('ss_menu').innerHTML = '';
	
	// On récupère un élément temporel
	var d = new Date();
	
	// Si le cache est supérieur au délai fixé, ou que les notifications ont changé, on effectue la requête
	if ((d.getTime() - window.localStorage.getItem('forum_cache_time') > window.localStorage.getItem('cache_delay') * 60 * 1000) || window.localStorage.getItem('forum_notif_cache') != get_notif_infos())
	{
		// On définit les variables utiles
		var url = "http://forum.pcinpact.com/";
		
		// On effectue la requête
		var xmlhttp = new XMLHttpRequest();
		xmlhttp.onreadystatechange=function()
		{
			// si la requête est OK
			if(xmlhttp.readyState==4)
			{
				// Si la réponse n'est pas vide
				if(!xmlhttp.responseText=="")
				{
					// On récupère les infos depuis le forum sous forme d'un tableau
					var forum_infos = new Array();
					forum_infos = get_forum_infos(xmlhttp.responseText);
					
					// On récupère le résultat
					var result = get_forum_txt(forum_infos);
					
					// On affiche le résultat
					document.getElementById('contenu').innerHTML = result;
					
					// On met le résultat en cache
					window.localStorage.setItem('forum_cache', result);
					
					// On met en cache les informations concernant les notifications
					// Cela nous permettra de savoir s'il y en a de nouvelles, ou pas
					window.localStorage.setItem('forum_notif_cache', get_notif_infos());

					// On enregistre l'heure
					var cache_time = new Date();
					window.localStorage.setItem('forum_cache_time', cache_time.getTime());
				}
			}
			else 
			{
				// Sinon on affiche le texte de chargement
				document.getElementById("contenu").innerHTML = charg_text;
			}
		}
		
		// On envoie la requête, ici, on attend le résultat afin de pouvoir l'envoyer, d'où le "false"
		xmlhttp.open("GET",url,true);
		xmlhttp.send("");
	}
	// Sinon, on affiche la version en cache
	else document.getElementById("contenu").innerHTML = window.localStorage.getItem('forum_cache');
}